package vq.codec.managers;

import java.util.List;

import vq.codec.entities.Dictionary;
import vq.codec.entities.Dat;
import vq.codec.entities.EncodeMethod;
import vq.codec.exception.DecodingException;
import vq.codec.exception.EncodingException;
import vq.codec.profiling.Profiler;

public abstract class VQCodecManager {

	public static VQCodecManager getInstance() {
		return VQCodecManagerImpl.getInstance();
	}
	
	public abstract List<Integer> encode(Dat source, Dictionary dictionary, 
			EncodeMethod encodeMethod) throws EncodingException;
	
	public abstract List<Integer> encode(Dat source, Dictionary dictionary, 
			EncodeMethod encodeMethod, Profiler profiler) throws EncodingException;
	
	public abstract Dat decode(List<Integer> encoded, 
			Dictionary dictionary) throws DecodingException;
	
	public abstract double calculateMSE(Dat source, Dat encoded);
	
	public abstract double calculatePSNR(Dat source, Dat encoded);
	
}
